\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{lun. avril 15 19:13:18 CEST 2013}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={OpenSSL - x509v3\_config},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Format de configuration des extensions de certificat X509 v3},
CreationDate={D:20130415191318},
ModDate={D:20130415191318},
Keywords={PKI;sécurité;chiffrement;certificats}
}}
\begin{document}
 
\begin{center}
{\Huge OpenSSL - x509v3\_config }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Format de configuration des extensions de certificat X509 v3}
 
\vspace{10mm}
 
\hspace{1mm}  Le format est le suivant:
\vspace{5mm} \\
\hspace{1mm}  \textbf{extension\_name=[critical,] extension\_options}
\vspace{5mm} \\
\hspace{1mm}  Si critical est présent, l’extension est critique. Il y’a 4 types d’extension: chaînes, multi-valué, raw, et arbitraire.
\vspace{5mm} \\
 
 
\hspace{1mm} exemple chaîne: \\
\hspace{1mm} \textbf{nsComment="This is a Comment"} \\
\hspace{1mm} exemple multi-valué: \\
\hspace{1mm} \textbf{basicConstraints=critical,CA:true,pathlen:1} \\
\hspace{1mm} variante d’un multivalué: \\
\hspace{1mm} \textbf{basicConstraints=critical,@bs\_section} \\
\hspace{1mm} \textbf{[bs\_section]} \\
\hspace{1mm} \textbf{CA=true} \\
\hspace{1mm} \textbf{pathlen=1} \\
 
\vspace{1cm}{\huge Extensions standard }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} Contraintes de base]{Extension multi-valué qui indique si un certificat est un certificat de CA}
\end{description}
 
{\ttfamily
basicConstraints=CA:TRUE\\ basicConstraints=CA:FALSE\\ basicConstraints=critical,CA:TRUE, pathlen:0\\
}
\vspace{8mm}
 
\hspace{1mm}  Un certificat de CA doit avoir \textbf{basicContraints} à TRUE et optionnellement un \textbf{pathlen} qui indique le nombre maximum de CA qui peut apparaitre sous celle-ci dans une chaîne. A 0, peut seulement signer des certificats finaux.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} Utilisation de clé]{Extension multi-valué consistant d’une liste de noms d’utilisation de clé permis Les noms supportés sont : \textbf{digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyAgreement, keyCertSign, cRLSign, encipherOnly et decipherOnly}.}
\end{description}
 
\hspace{1mm} exemple:
 
{\ttfamily
keyUsage=digitalSignature, nonRepudiation\\ keyUsage=critical, keyCertSign\\
}
\vspace{8mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} Utilisation de clé étendue]{Consiste en une liste d’utilisation indiquant l’utilisation de la clé publique. Peut être un nom court, ou un OID:}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} Value]{Meaning}
\item[\hspace{1mm} -----]{-------}
\item[\hspace{1mm} serverAuth]{SSL/TLS Web Server Authentication.}
\item[\hspace{1mm} clientAuth]{SSL/TLS Web Client Authentication.}
\item[\hspace{1mm} codeSigning]{Code signing.}
\item[\hspace{1mm} emailProtection]{E-mail Protection (S/MIME).}
\item[\hspace{1mm} timeStamping]{Trusted Timestamping}
\item[\hspace{1mm} msCodeInd]{Microsoft Individual Code Signing (authenticode)}
\item[\hspace{1mm} msCodeCom]{Microsoft Commercial Code Signing (authenticode)}
\item[\hspace{1mm} msCTLSign]{Microsoft Trust List Signing}
\item[\hspace{1mm} msSGC]{Microsoft Server Gated Crypto}
\item[\hspace{1mm} msEFS]{Microsoft Encrypted File System}
\item[\hspace{1mm} nsSGC]{Netscape Server Gated Crypto}
\end{description}
 
\hspace{1mm} exemple:
 
{\ttfamily
extendedKeyUsage=critical,codeSigning,1.2.3.4\\ extendedKeyUsage=nsSGC,msSGC\\
}
\vspace{8mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} Identifiant de clé du sujet]{Extention de type chaîne qui prend 2 valeurs : hash qui suit la rfc3280 ou une chaîne hexa donnant la valeur de l’extension à inclure}
\end{description}
 
\hspace{1mm} exemple:
 
{\ttfamily
subjectKeyIdentifier=hash\\
}
\vspace{8mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} Identifiant de clé d’autorité]{Permet 2 options, keyid et issuer et peuvent prendre optionnellement la valeur always}
\end{description}
 
\hspace{6mm}  Avec \textbf{keyid}, tente de copier le subject key identifier depuis le certificat parent. Avec always, une erreur est retourné si l’option échoue.
\vspace{5mm} \\
\hspace{6mm}  avec \textbf{issuer}, copie l’issuer et le numéro de série de l’issuer
\vspace{5mm} \\
 
 
\hspace{1mm} exemple:
 
{\ttfamily
authorityKeyIdentifier=keyid,issuer\\
}
\vspace{8mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} Subject Alternative Name]{L’extention subjectAltName permet d’inclure divers valeurs : email, URI, DNS, RID (ID:Object Identitifer), IP, dirName (un DN) et otherName.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} email]{contient une options spécial ’copy’ qui inclus automatiquement les emails contenus dans le sujet dans l’extension}
\item[\hspace{6mm} dirName]{devrait pointer vers une section contenant un DN à utiliser.}
\item[\hspace{6mm} otherName]{peut inclure des données arbitraires associées avec un OID}
\end{description}
 
\hspace{1mm} exemple:
 
{\ttfamily
subjectAltName=email:copy,email:my@other.address,URI :http://my.url.here/\\ subjectAltName=IP:192.168.7.1\\ subjectAltName=IP:13::17\\ subjectAltName=email:my@other.address,RID:1.2.3.4\\ subjectAltName=otherName:1.2.3.4;UTF8:some other identifier\\ \hspace{2mm}\\ subjectAltName=dirName:dir\_sect\\ \hspace{2mm}\\ \texttt{[}dir\_sect\texttt{]}\\ C=UK\\ O=My Organization\\ OU=My Unit\\ CN=My Name\\
}
\vspace{8mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} Issuer Alternative Name]{Supporte toutes les options litéral de subjectAltName. Il ne supporte pas l’option mail:copy. Il supporte issuer:copy qui copie tous les subjectAltName du certificat de l’issuer}
\end{description}
 
\hspace{1mm} exemple:
 
{\ttfamily
issuerAltName = issuer:copy\\
}
\vspace{8mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} Authority Info Access]{Extension d’accès aux informations de l’authorité donne des détails sur la mannière d’accéder à certaines informations lié à la CA. la syntaxe est \textbf{accessOID;location}, où location a la même syntaxe qu’un subjectAltName (excepté \textbf{email:copy}) accessOID peut être un OID valide mais seul certaines valeurs ont une signification, par exemple OCSP et calssuers}
\end{description}
 
\hspace{1mm} exemple:
 
{\ttfamily
authorityInfoAccess = OCSP;URI:http://ocsp.my.host/\\ authorityInfoAccess = caIssuers;URI:http://my.ca/ca.html\\
}
\vspace{8mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} Point de distribution de CRL]{Extension multi-valuée qui peut être un nom:valeur utilisant la même forme qu’un subjectAltName}
\end{description}
 
\hspace{1mm}  Dans le cas d’une simple option, la section indiquée contient les valeurs pour chaque champs. dans cette section:
\vspace{5mm} \\
\hspace{1mm}  Si le nom est fullname la valeur devrait contenir le nom complet du point de distribution dans le même format que subjectAltName.
\vspace{5mm} \\
\hspace{1mm}  Si le nom est \textbf{relativename}, la valeur devrait contenir un nom de section dont le contenu représente un DN
\vspace{5mm} \\
\hspace{1mm}  Le nom \textbf{CRLIssuer} devrait contenir une valeur pour ce champ au format subjectAltName
\vspace{5mm} \\
\hspace{1mm}  Si le nom est \textbf{reasons}, la valeur devrait consister en un champ contenant les raisons: \textbf{keyCompromise, CACompromise, affiliationChanged, superseded, cessationOfOperation, certificateHold, privilegeWithdrawn, AACompromise}.
\vspace{5mm} \\
 
 
\hspace{1mm} exemple:
 
{\ttfamily
crlDistributionPoints=URI:http://myhost.com/myca.crl\\ crlDistributionPoints=URI:http://my.com/my.crl,URI:http://oth...\\ crlDistributionPoints=crldistpoint1\_section\\ \hspace{2mm}\\ \texttt{[}crldistpoint1\_section\texttt{]}\\ fullname=URI:http://myhost.com/myca.crl\\ CRLissuer=dirName:issuer\_sect\\ reasons=keyCompromise, CACompromise\\ \hspace{2mm}\\ \texttt{[}issuer\_sect\texttt{]}\\ C=UK\\ O=Organisation\\ CN=Some Name\\
}
\vspace{8mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} Issuing Distribution Point]{Devrait seulement apparaître dans les CRL. Extension multi-valuée dont la syntaxe est similaire à la section pointé par l’extension de point de distribution de CRL avec quelques différences}
\end{description}
 
\hspace{1mm}  Les noms \textbf{reasons} et \textbf{CRLIssuer} ne sont pas reconnus
\vspace{5mm} \\
\hspace{1mm}  Le nom \textbf{onlysomereasons} est accepté. La valeur est au même format que le champ \textbf{reasons} des crlDistributionPoints. Les noms \textbf{onlyuser, onlyCA, onlyAA et indirectCRL} sont aussi acceptés et sont des booléen.
\vspace{5mm} \\
 
 
\hspace{1mm} exemple:
 
{\ttfamily
issuingDistributionPoint=critical, @idp\_section\\ \texttt{[}idp\_section\texttt{]}\\ fullname=URI:http://myhost.com/myca.crl\\ indirectCRL=TRUE\\ onlysomereasons=keyCompromise,CACompromise\\ \texttt{[}issuer\_sect\texttt{]}\\ C=UK\\ O=Organisation\\ CN=Some Name\\
}
\vspace{8mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} Certificate Policies]{Extension raw}
\end{description}
 
\hspace{1mm} Si on suit la recommandation PKIX, en utilisant des OID:
 
{\ttfamily
certificatePolicies= 1.2.4.5, 1.1.3.4\\
}
\vspace{8mm}
 
\hspace{1mm}  Si on inclus des qualifiers, les OID de stratégie et les qualifieurs doivent être spécifiés dans une section séparée (sous la forme \textbf{@section}) La section référée doit inclure l’OID de stratégie en utilisant \textbf{policyIdentifier}. les qualifiers \textbf{cPSuri} peuvent être inclus avec cette syntaxe:
\vspace{5mm} \\
 
 
{\ttfamily
CPS.nnn=value\\
}
\vspace{8mm}
 
\hspace{1mm} les qualifiers userNotice peuvent être définis avec:
 
{\ttfamily
userNotice.nnn=@notice\\
}
\vspace{8mm}
 
\hspace{1mm}  Cette section peut inclure explicitText, organization et noticeNumbers.
\vspace{5mm} \\
 
 
\hspace{1mm} exemple:
 
{\ttfamily
certificatePolicies=ia5org,1.2.3.4,1.5.6.7.8,@polsect\\ \texttt{[}polsect\texttt{]}\\ policyIdentifier = 1.3.5.8\\ CPS.1="http://my.host.name/";\\ CPS.2="http://my.your.name/";\\ userNotice.1=@notice\\ \texttt{[}notice\texttt{]}\\ explicitText="Explicit Text Here"\\ organization="Organisation Name"\\ noticeNumbers=1,2,3,4\\
}
\vspace{8mm}
 
\hspace{1mm}  Si \textbf{userNotice} est utilisé avec IE5, il faut l’option \textbf{ia5org} avant pour modifier l’encodage. Cette options modifie le type de champs \textbf{organization} dans la rfc2459, il peut seulement être de type \textbf{DisplayText}. Dans la rfc3280 \textbf{IA5String} est aussi permis.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} Policy Constraints]{Extension multivaluée consistant de nom \textbf{requireExplicitPolicy} ou \textbf{inhibitPolicyMapping} et une valeur entière non négative Au moins un composant doit être présent.}
\end{description}
 
\hspace{1mm} exemple:
 
{\ttfamily
policyConstraints = requireExplicitPolicy:3\\
}
\vspace{8mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} Inhibit Any Policy]{Extension chaîne consistant de valeurs non négatives}
\end{description}
 
\hspace{1mm} exemple:
 
{\ttfamily
inhibitAnyPolicy = 2\\
}
\vspace{8mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} Name Constraints]{Extension multi-valuée. Le nom devrait commencer avec le mot \textbf{permitted} ou \textbf{excluded}, suivi par un ';' le reste suivi la syntaxe subjectAltName excepté \textbf{email:copy} et \textbf{IP}}
\end{description}
 
\hspace{1mm} exemple:
 
{\ttfamily
nameConstraints=permitted;IP:192.168.0.0/255.255.0.0\\ nameConstraints=permitted;email:.somedomain.com\\ nameConstraints=excluded;email:.com\\ issuingDistributionPoint = idp\_section\\
}
\vspace{8mm}
 
\begin{description} \normalsize
\item[\hspace{1mm} OCSP No Check]{Extension chaîne, mais sa valeur est \textbf{ignored}}
\end{description}
 
\hspace{1mm} exemple:
 
{\ttfamily
noCheck = ignored\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Extensions arbitraires }
 
\
 
\hspace{1mm}  Si une extension n’est pas supportée par OpenSSL, elle doit être encodé en utilisant le format arbitraire. Il est possible d’utiliser ce format pour les extensions connues.
\vspace{5mm} \\
\hspace{1mm}  Il y’a 2 manières d’écrire des extensions de type arbitraire:
\vspace{5mm} \\
 
 
\hspace{1mm} Utiliser le mot ASN1 suivi de l’extension en utilisant la même syntaxe que ASN1\_generate\_nconf(3):
 
{\ttfamily
1.2.3.4=critical,ASN1:UTF8String:Some random data\\ 1.2.3.4=ASN1:SEQUENCE:seq\_sect\\ \texttt{[}seq\_sect\texttt{]}\\ field1 = UTF8:field1\\ field2 = UTF8:field2\\
}
\vspace{8mm}
 
\hspace{1mm} Utiliser le mot DER pour inclure les donnée brutes:
 
{\ttfamily
1.2.3.4=critical,DER:01:02:03:04\\ 1.2.3.4=DER:01020304\\
}
\vspace{8mm}
 
\hspace{1mm} La valeur après DER est un dump DER d’une extension. Une extension peut être placée dans cette forme pour remplacer le mode par défaut :
 
{\ttfamily
basicConstraints=critical,DER:00:01:02:03\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Notes }
 
\
 
\hspace{1mm} Si une extension est multi-valué et un champs doit contenir un ',', la forme longue doit être utilisée sinon le séparateur sera mal interprété:
 
{\ttfamily
subjectAltName=URI:ldap://somehost.com/CN=foo,OU=bar\\
}
\vspace{8mm}
 
\hspace{1mm} va produire une erreur, mais ceci est valide:
 
{\ttfamily
subjectAltName=@subject\_alt\_section\\ \texttt{[}subject\_alt\_section\texttt{]}\\ subjectAltName=URI:ldap://somehost.com/CN=foo,OU=bar\\
}
\vspace{8mm}
 
\hspace{1mm} Due à la librairie conf, le même nom de champ ne peut se trouver qu’une seul fois. Celà signifie que:
 
{\ttfamily
subjectAltName=@alt\_section\\ \texttt{[}alt\_section\texttt{]}\\ email=steve@here\\ email=steve@there\\
}
\vspace{8mm}
 
\hspace{1mm} Va seulement reconnaître la dernière valeur, alors que ceci reconnaîtra toutes les valeurs:
 
{\ttfamily
\texttt{[}alt\_section\texttt{]}\\ email.1=steve@here\\ email.2=steve@there\\
}
\vspace{8mm}
\end{flushleft}
\end{document}
